package alejandro.castro.arkanoid;

import java.util.LinkedList;
import java.util.List;

import alejandro.castro.bolita.Bolita;
import alejandro.castro.extras.AlertArkanoid;
import alejandro.castro.ladrillo.Ladrillo;
import alejandro.castro.paleta.GameOver;
import alejandro.castro.paleta.Paleta;

import com.uqbar.vainilla.GameScene;

public class ArkanoidScene extends GameScene {

	private List<Paleta> paletas;
	private List<Bolita> bolitas;
	private List<Ladrillo> ladrillos;

	public ArkanoidScene() {
		super();
		this.paletas = new LinkedList<Paleta>();
		this.bolitas = new LinkedList<Bolita>();
		this.ladrillos = new LinkedList<Ladrillo>();		
	}
	
	public void agregarPaleta(Paleta paleta){
		this.paletas.add(paleta);
		this.addComponent(paleta);
	}
	
	public void agregarBolita(Bolita bolita){
		this.bolitas.add(bolita);
		this.addComponent(bolita);
	}
	
	public void agregarLadrillo(Ladrillo ladrillo){
		this.ladrillos.add(ladrillo);
		this.addComponent(ladrillo);
	}

	public List<Paleta> getPaletas() {
		return paletas;
	}

	public List<Bolita> getBolitas() {
		return bolitas;
	}
	
	public List<Ladrillo> getLadrillos() {
		return ladrillos;
	}
	
	public void removerPaleta(Paleta paleta){
		this.paletas.remove(paleta);
		paleta.setDestroyPending(true);
	}
	
	public void removerBolita(Bolita bolita){		
		this.bolitas.remove(bolita);
		bolita.setDestroyPending(true);
	}
	
	public void removerLadrillo(Ladrillo ladrillo){
		this.ladrillos.remove(ladrillo);
		this.removeComponent(ladrillo);
		if(ladrillos.isEmpty()){
			youWin();
		}
	}

	public void youWin() {		
		this.addComponent(new AlertArkanoid("YOU WIN!", 150));
		this.congelarBolitas();
	}

	private void congelarBolitas() {
		for (Bolita bolita : bolitas) {
			bolita.stop();
		}
		
	}

	public void gameOver() {
		for (Paleta paleta : paletas) {
			paleta.setEstado(GameOver.getInstance());
		}
		this.addComponent(new AlertArkanoid("GAME OVER", 120));
		
	}

	public void tocoBordeInferior(Bolita bolita) {
		this.removerBolita(bolita);
		if(bolitas.isEmpty()){
			this.gameOver();
		}
		
	}
	
	
	
}
